package lx;

import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;

public class demo10 {
    public static void main(String[] args) throws IOException {
        //1.读取文件中的数据，添加到集合当中
        ArrayList<Student> list = new ArrayList<>();
        BufferedReader br = new BufferedReader(new FileReader("..\\day51\\src\\lx\\names.txt"));
        String line;
        while ((line = br.readLine()) != null) {
            //现在我们把钦逸抒-女-21-1.0文件中的学生信息 以-分割
            //其实0索引是姓氏，1索引是性别，2索引是年龄，3索引是权重
            String[] arr = line.split("-");
            //把这些索引对应的信息赋给学生的属性
            Student stu = new Student(arr[0], arr[1], Integer.parseInt(arr[2]), Double.parseDouble(arr[3]));
            list.add(stu);
        }
        br.close();
        //2.计算出所有学生总权重
        double sum=0;
        for (Student student : list) {
            sum+=student.getWeight();
        }
        System.out.println("总权重为"+sum);
        //3.计算每一个学生的实际占比
        double[]arr=new double[list.size()];
        for (int i = 0; i < list.size(); i++) {
            arr[i]=list.get(i).getWeight()/sum;
        }
       // System.out.println(Arrays.toString(arr));//[0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]

        //4.计算每一个学生的权重占比范围
        //每一个学生的权重占比范围是0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0之间
        //每一个学生的实际占比是    0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1
        //怎么得到权重占比范围呢？
        //从第一位索引开始 本索引的权重占比是上一个索引的权重占比+当前索引的权重占比
        for (int i = 1; i < arr.length; i++) {
            arr[i]=arr[i]+arr[i-1];
        }

        System.out.println(Arrays.toString(arr));

        //5.随机生成一个0-1之间的数，判断这个数在哪个区间，就返回对应的索引

        double number = Math.random();
        //采用二分查找方法
        //该方法返回 -插入点-1
        //插入点=-结果-1
        int result = -Arrays.binarySearch(arr, number)-1;
        System.out.println("随机数："+number);
        System.out.println("插入索引"+result);

        //6.返回对应的索引对应的学生信息
        Student stu = list.get(result);
        System.out.println("学生信息："+stu);

        //7.修改当前学生的权重
        double w=stu.getWeight()/2;
        stu.setWeight(w);

        System.out.println("修改后的学生信息："+stu);
        //8.写到本地文件当中
        BufferedWriter bw=new BufferedWriter( new FileWriter("..\\day51\\src\\lx\\names.txt"));
        for (Student s : list) {
            //s代表集合里的每一位学生对象
            //把学生信息写到本地文件当中
            bw.write(s.toString());
            bw.newLine();
        }

        bw.close();


    }
}
